home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_2
/
hp48_ir
< prev
next >
Wrap
Internet Message Format
|
1995-03-31
|
8KB
From comp.sys.hp48 Sun Aug 11 20:26:51 1991
Path: seq!ecsgate!mcnc!uvaarpa!haven.umd.edu!purdue!sample.eng.ohio-state.edu!zaphod.mps.ohio-state.edu!swrinde!elroy.jpl.nasa.gov!jpl-devvax!puente!garyf
From: garyf@puente.jpl.nasa.gov (Gary Friedman)
Newsgroups: comp.sys.hp48
Subject: Infrared Remote Control Learn/Transmit Source Code for the HP48
Summary: Direct from the Corvallis conference proceedings
Keywords: IR, remote, learning, infrared, world is drooling over this...
Message-ID: <1991Aug9.182627.2019@jpl-devvax.jpl.nasa.gov>
Date: 9 Aug 91 18:26:27 GMT
References: <1991Jul31.215836.12760@panix.com> <1991Aug02.003032.6618@corpane.uucp> <17365@life.ai.mit.edu>
Sender: usenet@jpl-devvax.jpl.nasa.gov (For NNTP so rrn will be able to post)
Distribution: comp.sys.handhelds, comp.sys.hp48
Organization: Jet Propulsion Laboratory, Advanced Engineering Group
Lines: 219
Okay, okay! Here is the article on the IR Remote control for the 48!!!!
Remember, this was literally the first cut, and there is gobs of room
for improvment and polishing!
Enjoy!
-Gary Friedman
------------------------------------------------------------------
IR Sampling of TV Remotes
by Dave Marsh (Typed in by Gary Friedman)
Many users have experimented with the HP 48 to make it capable of
being a TV remote control unit. With its built-in IR capability
numerous schemes have been tried to give the HP 48 additional power.
Previously these schemes involved knowing the digital codes used to
modulate the 40 KHz IR signal commonly used.
With the recent release by HP of their Software Development Tools it
is possible to write assembly programs for the HP 48. Faster speed
and greater control of the calculator are gained using this approach.
A method that occurred to me during lunch one day - I do development
work on the HP 48 as part of my job - is implemented in the two
programs on the following pages. The basic idea is to sample the
incoming IR as fast as possible to digitize the signal and record it.
This takes lots of memory, but it actually works. Using this method
of "learning" the codes instead of knowing them allows the HP 48 to
be used by any IR device. The inverse is used with the second program
using the stored sampled signal (stored as a text string) to control
the transmitter.
This approach is still in the experimental stages and there is much
work to be done. Applications include controlling systems such as the
BSR system that has in IR controller - at least they used to offer an
IR controller. Your HP 48 could, with off-the-shelf components and a
simple program, control the lights and appliances of your home or
factory.
The sampling rate is estimated at about 60 kilohertz, still short of
the desired twice the carrier frequency. Still it works quite well.
I have written preliminary programs that convert the digitized signal
into a graphics object that may be displayed or printed. This aids
the decoding of the signal if that is of interest.
Once the optimum signal is determined it may be stored in a more
memory-efficient form. A complete set of commands for any IR
controller could be made available to any user. This aspect of the
programming ahs yet to be done. Copies of the program will be
available at the conference and time does not allow a complete
description of the program here. The listings are commented and there
is always room for improvement. One problem is the memory usage of
using one nibble where only one bit is needed. Perhaps other
programmers will find additional techniques to make the program
faster.
Dave Marsh
18335 Jakes Way #103
Canyon Country, CA 91351
(818) 362-6822 x3007 (W)
[Poster's note: I will try to post an ASC-> version of the binary this
weekend. -GF]
-----------------------------------------------------------------
* LOOK
* A PROGRAM TO SAMPLE I.R. REMOTE CONTROL SIGNALS
*
* 1: STRING -> 1: STRING
*
* (C) 1991 DAVE MARSH - THIS PROGRAM MAY BE DISTRIBUTED ONLY IF
* IT'S FREE OF CHARGE
*
* (Insert your favorite disclaimers here)
*
ASSEMBLE
NIBASC \HPHP48-F\
RPL
::
CK1NOLASTWD ( CHECK FOR 1 ARG )
CK&DISPATCH1 ( CHECK ARG IS STRING )
THREE
::
TOTEMPOB
CODE
GOSBVL #01115 DisableIntr (FOR SMOOTH INPUT)
INTOFF
A=DAT1 A SET A TO POINT AT BEGINNING OF STRING
GOSBVL #0679B SAVE REGISTERS (SAVEPTR)
D1=HEX #0011A 11Ah IS ADDRESS OF I.R. INPUT
P= 0
C=0 P
DAT1=C P SET 'TRIGGERED' BIT TO 0
D0=A
D0=D0+ 5 D0 POINTS TO LENGTH FIELD OF STRING
C=DAT0 A
C=C-CON A, 5 SUBTRACT 5 FROM LENGTH IN ORDER TO GET
DATA LENGTH ONLY
D0=D0+ 5 D0 POINTS TO DATA AREA OF STRING
A=A+CON A, 10 SET A = D0
C=C+A A SET C= ADDRESS OF END OF STRING
B=A A
LOOP1 A=DAT1 P LOOP UNTIL TRIGGER BIT IS 1 (I.R. SIGNAL REC'D)
?ABIT=0 0
GOYES LOOP1
LOOP2 A=DAT1 P GET I.R. DATA AND STORE AS NIBBLE OF STRING
DAT0=A P
D0=D0+ 1
B=B+1 A
?B#C A LOOP UNTIL D0=END OF STRING (STORAGE AREA)
GOYES LOOP2
GOSBVL #010E5 AllowIntr ( re-enable interrupts )
GOVLNG #05143 RESTORE REGISTERS (GETPTRLOOP)
ENDCODE
;
;
------------------------------------------------------------------
* XMITREM
* A PROGRAM TO EMULATE AN I.R. REMOTE CONTROL TRANSMISSION
* REQUIRES OUTPUT OF 'LOOK' PROGRAM AS INPUT
*
*
* 1: STRING -> EMPTY STACK
*
*
* (C) 1991 DAVE MARSH- THIS PROGRAM MAY BE DISTRIBUTED ONLY IF
* IT'S FREE OF CHARGE
*
*
ASSEMBLE
NIBASC \HPHP48-F\
RPL
::
CK1NOLASTWD
CK&DISPATCH1 ( CHECK FOR 1 ARG- STRING )
THREE
::
TOTEMPOB ( MAKE NEW COPY OF STRING IN TEMPORARY MEMORY )
CODE
GOSBVL #01115 DisableIntr (FOR SMOOTH TRANSMISSION)
INTOFF
A=DAT1 A A POINTS TO INPUT STRING (OUTPUT FROM LOOK)
D1=D1+ 5
D=D+1 A
GOSBVL #0679B SAVEPTR
P= 0
C=0 P
D1=HEX #0011A 11Ah IS ADDRESS OF I.R. INPUT & CONTROL
DAT1=C P SET IR CONTROL BITS TO 0
D0=A
D0=D0+ 5 D0 POINTS TO LENGTH FIELD OF STRING
D1=HEX #0011C 11Ch IS ADDRESS OF I.R. LED CONTROL (BIT 3)
DAT1=C P MAKE SURE LED IS OFF
C=DAT0 A
C=C-CON A, 5 C IS LENGTH OF DATA STRING ONLY
D0=D0+ 5 D0 POINTS TO DATA FIELD OF STRING
A=A+CON A, 10 SET A = D0
C=C+A A SET C= ADDRESS OF END OF STRING
B=A A
R1=A
LOOP2 A=DAT0 P
A=A-1 P SUBTRACT 1 FROM NIBBLE (FORMS BIT 3 ON OR NOTHING)
DAT0=A P AND PUT BACK
D0=D0+ 1 INCREMENT NEXT NIBBLE
B=B+1 A
?B#C A LOOP UNTIL END OF STRING
GOYES LOOP2
A=R1
B=A A
D0=A A
LOOP3 A=DAT0 P
DAT1=A P SEND DATA TO LED (OFF OR ON)
D0=D0+ 1 INCREMENT TO NEXT NIBBLE
B=B+1 A
?B#C A LOOP UNTIL END OF STRING
GOYES LOOP3
A=0 P MAKE SURE LED IS OFF
DAT1=A P
GOSBVL #010E5 RESTORE INTERRUPTS
GOVLNG #05143 GETPTRLOOP
ENDCODE
;
--
----------------------------------------------------------------
Gary Friedman Jet Propulsion Laboratory - NASA
4800 Oak Grove Drive, Pasadena, CA. 91109 (818) 354-1447
garyf@puente.JPL.NASA.GOV || {cit-vax,elroy,psivax}!devvax!garyf